package com.baidu.calculator;

import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.baidu.calculator.databinding.AlertDialogBinding;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * MainActivity只是系统定义的一个类 == 一个不同的类
 * 这个类扮演的角色就是用于管理和显示一个界面
 * 之所以这个普通的类可以实现管理和显示，
 * 原因是他继承了一个系统的类：AppCompatActivity
 *
 * app的启动顺序
 *      onCreate：希望用户配置这个窗口显示什么内容
 *               绑定layout
 *               监听layout文件中控件的事件
 *               做一些准备工作
 *      注意：自己的代码，和对界面的操作，必须是在setContentView之后
 */
public class MainActivity extends AppCompatActivity {
    TextView tvResult;
    TextView tvExpression;
    Calculator mCalculator = new Calculator(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //将layout中的布局文件和当前这个Activity建立关联关系
        //一旦建立，系统自动将xml文件解析为一个view
        //将这个view添加到当前的窗口中
        setContentView(R.layout.activity_main);

        //查找对应的控件
        tvResult = findViewById(R.id.tvResult);
        tvExpression = findViewById(R.id.tvExpression);
        findViewById(R.id.ivHistory).setOnClickListener(v ->{
            showHistory();
        });
        loadData();
    }

    public void showHistory(){
        AlertDialog dialog;
        //创建Builder对象
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //解析binding类对象
        AlertDialogBinding dialogBinding = AlertDialogBinding.inflate(getLayoutInflater());
        //将binding类中view显示到弹窗视图中
        builder.setView(dialogBinding.getRoot());
        //通过create创建弹窗对象
        dialog = builder.create();
        //展示弹窗
        dialog.show();

        //给按钮添加点击事件
        dialogBinding.button2.setOnClickListener(v1->{
            //点击之后任务
            //操作完毕，隐藏弹窗
            dialog.dismiss();
        });

    }

    private void loadData(){
        SharedPreferences sp = getSharedPreferences("expression", MODE_PRIVATE);
        tvExpression.setText(sp.getString("expressionKey",""));
        tvResult.setText(sp.getFloat("resultKey",0f)+"");
    }

    //定义一个方法用于接收Calculator传递过来的数据
    //更新表达式
    public void updateExpression(String expression){
        tvExpression.setText(expression);
    }
    //更新结果
    public void updateResult(String result){
        tvResult.setText(result);
    }

    //清空按钮
    public void clear(View view)  {
        mCalculator.clear();
    }

    //删除按钮
    public void delete(View view){
        mCalculator.delete();
    }

    //数字按钮
    public void expressionButtonClicked(View view){
        //将view转化为真实的对象类型
        TextView tv = (TextView)view;
        //获取点击的控件上文本内容
        String num = tv.getText().toString();
        //传递给计算器对象
        mCalculator.addNumber(num);
    }

    //运算按钮
    public void calculate(View view){
        mCalculator.calculate();
    }
}












































